home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 34
/
Amiga Format CD34 (1998-11-20)(Future Publishing)(GB)[!][Christmas issue].iso
/
-seriously_amiga-
/
programming
/
basic
/
blitzc2p
/
c2p
/
c2p060onlycls.ascii
< prev
next >
Wrap
Text File
|
1998-10-01
|
7KB
|
425 lines
WBStartup
NoCli
; CLEARSCREEN version. Additional code by Paul West.
; Non-clearscreen results:
; 040/25 results:
; 320x200 @46.0fps DoublePAL or 48.2fps PAL
; 320x256 @34.2fps DoublePAL or 37.4fps PAL
; 320x240 @37.1fps DoublePAL or 40.1fps PAL
; 060/50 results:
; 320x256 @50fps PAL
; 320x200 @66fps PAL
#c2pBPLX=320
#c2pBPLY=256
#c2pBPLSIZE=(#c2pBPLX*#c2pBPLY)/8
#scrwidth=#c2pBPLX
#scrheight=#c2pBPLY
#screensize=#scrwidth*#scrheight
#clearscreento=$00000000
; c2p1x1_8_c5_060
Statement c2p060onlyinit{A.l,B.l}
;A.l=d0=Width.w
;B.l=d0=Height.w
; d0.w chunkyx [chunky-pixels]
; d1.w chunkyy [chunky-pixels]
; d3.w scroffsy [screen-pixels]
MOVEQ.l #0,d3 ; Y offset
c2p1x1_8_c5_060_init
LEA c2p_data(pc),a0
ANDI.l #$ffff,d0
MULU.w d0,d3
LSR.l #3,d3
MOVE.l d3,c2p_scroffs-c2p_data(a0)
MULU.w d0,d1
MOVE.l d1,c2p_pixels-c2p_data(a0)
AsmExit
End Statement
Statement c2p060only{A.l,B.l}
MOVE.l d0,a0 ; Chunky
MOVE.l d1,a1 ; Planar
; a0 c2pscreen
; a1 bitplanes
c2p1x1_8_c5_060
MOVE.w #_xend-_x,d0
MOVEM.l a3-a6,-(a7)
MOVE.l a7,stackstore
MOVE.l #clearscreento,a7
LEA c2p_data(pc),a2
ADD.w #c2pBPLSIZE,a1
ADD.l c2p_scroffs-c2p_data(a2),a1
MOVE.l c2p_pixels-c2p_data(a2),a3
ADD.l a0,a3
MOVE.l a1,a2
ADD.l #c2pBPLSIZE*4,a2
CMP.l a0,a3
BEQ _none
MOVE.l (a0),d0
MOVE.l a7,(a0)+
MOVE.l (a0),d1
MOVE.l a7,(a0)+
MOVE.l (a0),d2
MOVE.l a7,(a0)+
MOVE.l (a0),d3
MOVE.l a7,(a0)+
MOVE.l #$0f0f0f0f,d5 ; Swap 4x1, parts 1 & 2
MOVE.l d1,d6
MOVE.l d3,d7
LSR.l #4,d6
LSR.l #4,d7
EOR.l d0,d6
EOR.l d2,d7
AND.l d5,d6
AND.l d5,d7
EOR.l d6,d0
EOR.l d7,d2
LSL.l #4,d6
LSL.l #4,d7
EOR.l d6,d1
EOR.l d7,d3
MOVE.l d0,a4
MOVE.l d1,a5
MOVE.l d2,a6
MOVE.l d3,d5
MOVE.l (a0),d0
MOVE.l a7,(a0)+
MOVE.l (a0),d1
MOVE.l a7,(a0)+
MOVE.l (a0),d2
MOVE.l a7,(a0)+
MOVE.l (a0),d3
MOVE.l a7,(a0)+
MOVE.l d1,d6 ; Swap 4x1, parts 3 & 4
MOVE.l d3,d7
LSR.l #4,d6
LSR.l #4,d7
EOR.l d0,d6
EOR.l d2,d7
AND.l #$0f0f0f0f,d6
AND.l #$0f0f0f0f,d7
EOR.l d6,d0
EOR.l d7,d2
LSL.l #4,d6
LSL.l #4,d7
EOR.l d6,d1
EOR.l d7,d3
EXG d1,a4
EXG d3,a6
MOVE.w d0,d6 ; Swap 16x4, parts 1 & 3
MOVE.w d2,d7
MOVE.w d1,d0
MOVE.w d3,d2
SWAP d0
SWAP d2
MOVE.w d0,d1
MOVE.w d2,d3
MOVE.w d6,d0
MOVE.w d7,d2
BRA _start
_x
MOVE.l (a0),d0
MOVE.l a7,(a0)+
MOVE.l (a0),d1
MOVE.l a7,(a0)+
MOVE.l (a0),d2
MOVE.l a7,(a0)+
MOVE.l (a0),d3
MOVE.l a7,(a0)+
MOVE.l d7,c2pBPLSIZE*2(a1)
MOVE.l #$0f0f0f0f,d5 ; Swap 4x1, parts 1 & 2
MOVE.l d1,d6
MOVE.l d3,d7
LSR.l #4,d6
LSR.l #4,d7
EOR.l d0,d6
EOR.l d2,d7
AND.l d5,d6
AND.l d5,d7
MOVE.l a6,-c2pBPLSIZE(a1)
EOR.l d6,d0
EOR.l d7,d2
LSL.l #4,d6
LSL.l #4,d7
EOR.l d6,d1
EOR.l d7,d3
MOVE.l a5,d7
MOVE.l d0,a4
MOVE.l d1,a5
MOVE.l d2,a6
MOVE.l d3,d5
MOVE.l (a0),d0
MOVE.l a7,(a0)+
MOVE.l (a0),d1
MOVE.l a7,(a0)+
MOVE.l (a0),d2
MOVE.l a7,(a0)+
MOVE.l (a0),d3
MOVE.l a7,(a0)+
MOVE.l d7,(a1)+
MOVE.l d1,d6 ; Swap 4x1, parts 3 & 4
MOVE.l d3,d7
LSR.l #4,d6
LSR.l #4,d7
EOR.l d0,d6
EOR.l d2,d7
AND.l #$0f0f0f0f,d6
AND.l #$0f0f0f0f,d7
EOR.l d6,d0
EOR.l d7,d2
LSL.l #4,d6
LSL.l #4,d7
EOR.l d6,d1
EOR.l d7,d3
EXG d1,a4
EXG d3,a6
MOVE.w d0,d6 ; Swap 16x4, parts 1 & 3
MOVE.w d2,d7
MOVE.w d1,d0
MOVE.w d3,d2
SWAP d0
SWAP d2
MOVE.w d0,d1
MOVE.w d2,d3
MOVE.w d6,d0
MOVE.w d7,d2
MOVE.l d4,c2pBPLSIZE-4(a1)
_start
MOVE.l #$33333333,d4 ; Swap 2x4, parts 1 & 3
MOVE.l d0,d6
MOVE.l d2,d7
LSR.l #2,d6
LSR.l #2,d7
EOR.l d1,d6
EOR.l d3,d7
AND.l d4,d6
AND.l d4,d7
EOR.l d6,d1
EOR.l d7,d3
LSL.l #2,d6
LSL.l #2,d7
EOR.l d6,d0
EOR.l d7,d2
MOVE.l #$00ff00ff,d4 ; Swap 8x2, parts 1 & 3
MOVE.l d2,d6
MOVE.l d3,d7
LSR.l #8,d6
LSR.l #8,d7
EOR.l d0,d6
EOR.l d1,d7
AND.l d4,d6
AND.l d4,d7
EOR.l d6,d0
EOR.l d7,d1
LSL.l #8,d6
LSL.l #8,d7
EOR.l d6,d2
EOR.l d7,d3
MOVE.l #$55555555,d4 ; Swap 1x2, parts 1 & 3
MOVE.l d2,d6
MOVE.l d3,d7
LSR.l #1,d6
LSR.l #1,d7
EOR.l d0,d6
EOR.l d1,d7
AND.l d4,d6
AND.l d4,d7
EOR.l d6,d0
EOR.l d7,d1
MOVE.l d1,c2pBPLSIZE*2(a2)
ADD.l d6,d6
ADD.l d7,d7
EOR.l d6,d2
EOR.l d7,d3
EXG a5,d0
EXG d5,d1
EXG a4,d2
EXG a6,d3
MOVE.w d2,d6 ; Swap 16x4, parts 2 & 4
MOVE.w d3,d7
MOVE.w d0,d2
MOVE.w d1,d3
SWAP d2
SWAP d3
MOVE.l a6,c2pBPLSIZE(a2)
MOVE.w d2,d0
MOVE.w d3,d1
MOVE.w d6,d2
MOVE.w d7,d3
MOVE.l #$33333333,d4 ; Swap 2x4, parts 2 & 4
MOVE.l d2,d6
MOVE.l d3,d7
LSR.l #2,d6
LSR.l #2,d7
EOR.l d0,d6
EOR.l d1,d7
AND.l d4,d6
AND.l d4,d7
EOR.l d6,d0
EOR.l d7,d1
LSL.l #2,d6
LSL.l #2,d7
MOVE.l a5,(a2)+
EOR.l d6,d2
EOR.l d7,d3
MOVE.l #$00ff00ff,d4 ; Swap 8x2, parts 2 & 4
MOVE.l d1,d6
MOVE.l d3,d7
LSR.l #8,d6
LSR.l #8,d7
EOR.l d0,d6
EOR.l d2,d7
AND.l d4,d6
AND.l d4,d7
EOR.l d6,d0
EOR.l d7,d2
LSL.l #8,d6
LSL.l #8,d7
MOVE.l a4,-c2pBPLSIZE-4(a2)
EOR.l d6,d1
EOR.l d7,d3
MOVE.l #$55555555,d4 ; Swap 1x2, parts 2 & 4
MOVE.l d1,d6
MOVE.l d3,d7
LSR.l #1,d6
LSR.l #1,d7
EOR.l d0,d6
EOR.l d2,d7
AND.l d4,d6
AND.l d4,d7
EOR.l d6,d0
EOR.l d7,d2
ADD.l d6,d6
ADD.l d7,d7
EOR.l d6,d1
EOR.l d7,d3
MOVE.l d0,d7
MOVE.l d1,d4
MOVE.l d2,a5
MOVE.l d3,a6
CMP.l a0,a3
BNE _x
_xend
MOVE.l d7,c2pBPLSIZE*2(a1)
MOVE.l d4,c2pBPLSIZE(a1)
MOVE.l a5,(a1)+
MOVE.l a6,-c2pBPLSIZE-4(a1)
_none
MOVE.l stackstore(pc),a7
MOVEM.l (a7)+,a3-a6
AsmExit
Even4
stackstore: Dc.l 0
c2p_data
c2p_screen: Dc.l 0
c2p_scroffs: Dc.l 0
c2p_pixels: Dc.l 0
Ds.l 16
End Statement
.blitzprogram
; Setup
InitBank 0,(#scrwidth*#scrheight)+1000,2|65536 ; Chipram planar buffer
CludgeBitMap 0,#scrwidth,#scrheight,8,Bank(0)
InitPalette 0,256
For c=0 To 255
AGAPalRGB 0,c,Rnd(c),Rnd(c),Rnd(c)
Next c
AGAPalRGB 0,0,0,0,0
Screen 0,0,0,#scrwidth,#scrheight,8,0,"c2p test",0,0,0
Use Palette 0
VWait 50
baseaddress1.l=AllocMem(#scrwidth*#scrheight,$10000) ; Fastram chunky buffer
; Put something into the chunky buffer so we can see it working
GetReg a0,baseaddress1
MOVE.l #0,d0
MOVE.l #screensize-1,d1
cloop
MOVE.b d0,(a0)+
ADDQ.l #1,d0
SUBQ.l #1,d1
TST.l d1
BLT done
BRA cloop
done
; Do the c2p test
c2p060onlyinit{#scrwidth,#scrheight}
VWait 20
Forbid_
VWait
ResetTimer
For time=1 To 800
c2p060only{baseaddress1,Bank(0)} ; Convert chunky to planar
Next time
t=Ticks
VWait 2 : Permit_
VWait 20
FindScreen 0
Window 0,0,11,640,100,0,"Test results for c2p",0,0
WindowOutput 0
NPrint "Routine performed @ ",50/(t/800),"fps - ",t," ticks"
NPrint " "
NPrint "Press mousebutton..."
Free Screen 0
MouseWait
Free Window 0
End